package com.sxt.resttemplate.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.sxt.resttemplate.common.model.User;

@RestController
@RequestMapping("/admin") //在类上使用RequestMapping，里面设置的value就是方法的父路径
public class RestTestController {
	@Autowired
    private RestTemplate restTemplate;
	/**
	 * GET 请求1：getForObject() 方法的使用
	 * getForObject() 用于发送一个 HTTP GET 请求。它和 getForEntity() 用法几乎相同。
	 * 区别在于 getForObject() 返回值返回的是响应体，省略了很多 response 的信息。
	 * 
	 * https://www.hangge.com/blog/cache/detail_2513.html
	 * 
	 */
	
	//将响应结果映射为一个 String 字符串，并打印出来
    @GetMapping("/test")
    public void test() {
    	String url = "http://localhost:8080/index/users/3";
    	String str = restTemplate.getForObject(url, String.class);
    	System.out.println(str);
    	return;
    }
    
    
    //将结果转换为对象
    @GetMapping("/test1")
    public void test1() {
    	String url = "http://localhost:8080/index/users/2";
    	User user = restTemplate.getForObject(url, User.class);
    	System.out.println(user.toString());
    return;
    }
    
    
    //将结果转成数组
    @GetMapping("/test2")
    public void test2() {
    	 String url = "http://localhost:8080/index/users";
    	 User[] arr = restTemplate.getForObject(url, User[].class);
    	 for(User user : arr) {
    		 System.out.println(user.toString());
    	 }
         System.out.println("结果数：" + arr.length);
         return;
    }
    
    
    //使用占位符的形式传递参数
    @GetMapping("/test3")
    public void test3() {
    	String url = "http://localhost:8080/index/users/{1}";
    	User user = restTemplate.getForObject(url, User.class, 1);
    	System.out.println(user.toString());
    	return;
    }
    //另一种使用占位符的形式
    @GetMapping("/test4")
    public void test4() {
    	String url = "http://localhost:8080/index/users/{id}";
    	int id = 5;
    	User user = restTemplate.getForObject(url, User.class, id);
    	System.out.println(user.toString());
    	return;
    }
    //用 map 装载参数
    @GetMapping("/test5")
    public void test5() {
    	//String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
    	String url = "http://jsonplaceholder.typicode.com/{name}";
    	Map<String,Object> map = new HashMap<>();
    	//map.put("type", "posts");
    	map.put("name", "王五");
    	User user = restTemplate.getForObject(url, User.class, map);
    	System.out.println(user.toString());
    	return;
    }
    /**
     * GET 请求2：getForEntity() 方法的使用
     * 
     */
    //请求一个网络接口，并将响应体、响应头、响应码打印出来。其中响应体的类型设置为 String
    
    
    
    //将消息体转换为对象
    
    
    
    //响应体转成对应的 Bean 数组
    
    /**
     * POST 请求2：postForObject() 方法的使用
     * 
     */
    
    

    /**
     * POST 请求2：postForEntity() 方法的使用
     * 
     */
    
}
